#include "shm.hpp"
#include "namedPipe.hpp"

// serve read 并 管理共享内存
int main()
{
    Shm shm(gpathname, gproj_id, gCreater);
    NamedPipe namedpipe(comm_path, Creater);

    namedpipe.OpenForRead();         // 打开管道
    char *addr = (char *)shm.Addr(); // 返回shm首地址

    while (true)
    {
        std::string temp;
        int n = namedpipe.ReadNamedPipe(&temp); // 管道没有信息时就阻塞, 有信息继续运行; 就这样利用管道的读写保护协调机制, 使shm的读写协调
        if (n > 0)
        {
            std::cout << "read success" << std::endl;
        }
        else if (n == 0)
        {
            std::cout << "write quit, read too!" << std::endl;
            break;
        }
        else //(n < 0)
        {
            std::cerr << "read fail" << std::endl;
            break;
        }
        std::cout << temp << std::endl;

        std::cout << addr << std::endl;
        // addr 是一个 char* 类型的指针，指向一个字符数组或以 null 结尾的字符串。
        // std::cout << addr 会将指针 addr 当作一个 C 风格字符串来处理，输出从 addr 指向的内存位置开始的所有字符，
        // 直到遇到 null 终止符（'\0'）。
        sleep(1);
    }

    // shm.TestState();

    return 0;
}